﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

namespace LeksickiAnalizator
{
	/// <summary>
	/// Klasa koja služi za pokretanje leksičkog analizatora
	/// </summary>
	public class Program
	{
		/// <summary>
		/// Ulazna točka programa
		/// </summary>
		/// <param name="args">argumenti komandne linije</param>
		public static void Main(string[] args)
		{
			var listaUniformnihZnakova = new ListaUniformnihZnakova();
			var tablicaIzvornihZnakova = new TablicaIzvornihZnakova();

			var leksickiAnalizator = new LeksickiAnalizator(listaUniformnihZnakova, tablicaIzvornihZnakova);

			var pogreske = leksickiAnalizator.Obradi(new StreamReader(args[0]));

			//IspisiTablice(listaUniformnihZnakova, tablicaIzvornihZnakova, pogreske);

			Sucelje sucelje = new Sucelje();
			sucelje.DodajIzvore(args[0],listaUniformnihZnakova, tablicaIzvornihZnakova, pogreske);
			
			sucelje.ShowDialog();

			//Console.ReadKey();
		}

		/// <summary>
		/// Ispisuje tablice na konzolu
		/// </summary>
		/// <param name="listaUniformnihZnakova">lista uniformnih znakova</param>
		/// <param name="tablicaIzvornihZnakova">lista izvornih znakova</param>
		/// <param name="pogreske">lista pogrešaka leksičke analize</param>
		private static void IspisiTablice(ListaUniformnihZnakova listaUniformnihZnakova, TablicaIzvornihZnakova tablicaIzvornihZnakova, IList<Pogreska> pogreske)
		{
			Console.WriteLine("/******************* LISTA UNIFORMNIH ZNAKOVA **********************/");
			Console.WriteLine("Broj reda:\tIndeks u tablici znakova:\tUniformni znak");
			foreach (var uniformniZnak in listaUniformnihZnakova.DohvatiUniformneZnakove())
			{
				Console.WriteLine("{0} \t\t {1}  \t\t\t\t {2}", uniformniZnak.BrojReda, uniformniZnak.IndeksUTabliciZnakova, uniformniZnak.UniformniZnak_);
			}

			Console.WriteLine("/******************* LISTA IZVORNIH ZNAKOVA ************************/");
			Console.WriteLine("Indeks:\t\tZnak   --->   (Uniformni znak):");
			foreach (var izvorniZnak in tablicaIzvornihZnakova.DohvatiIzvorneZnakove())
			{
				Console.WriteLine("{0}\t\t{1}   --->   ({2})", izvorniZnak.Indeks, izvorniZnak.IzvorniTekst, izvorniZnak.UniformniZnak);
			}

			Console.WriteLine("/******************* LISTA POGREŠKI **********************/");
			foreach (var pogreska in pogreske)
			{
				Console.WriteLine("{0}. red, znak: {1}", pogreska.Redak, pogreska.Znak);
			}
		}
	}
}
